package com.lxf.password;

/**
 * 各种字符组合
 * @author lxf
 * @date 2016-5-12
 * 主要有三种: 1.纯数字; 2.纯字母; 3.数字加字母; 
 * 4.数字+字母+部分特殊字符(复杂度高,也最复杂)
 */
public class CombinedChar {
	
	/**
	 * 根据数字获得对应的小写字母, 26个小写
	 * @param num	
	 * @return
	 */
	public static String getLowerChar(int num){
		if(num==0){
			return "a";
		}else if(num==1){
			return "b";
		}else if(num==2){
			return "c";
		}else if(num==3){
			return "d";
		}else if(num==4){
			return "e";
		}else if(num==5){
			return "f";
		}else if(num==6){
			return "g";
		}else if(num==7){
			return "h";
		}else if(num==8){
			return "i";
		}else if(num==9){
			return "j";
		}else if(num==10){
			return "k";
		}else if(num==11){
			return "l";
		}else if(num==12){
			return "m";
		}else if(num==13){
			return "n";
		}else if(num==14){
			return "o";
		}else if(num==15){
			return "p";
		}else if(num==16){
			return "q";
		}else if(num==17){
			return "r";
		}else if(num==18){
			return "s";
		}else if(num==19){
			return "t";
		}else if(num==20){
			return "u";
		}else if(num==21){
			return "v";
		}else if(num==22){
			return "w";
		}else if(num==23){
			return "x";
		}else if(num==24){
			return "y";
		}else if(num==25){
			return "z";
		}else{
			return "";
		}
	}
	
	/**
	 * 获取数字和小写字母; 36个
	 * @param num
	 * @return
	 */
	public static String getNumOrLowerChar(int num){
		if(num >= 0 && num <= 9){
			return num+"";
		}else if(num==10){
			return "a";
		}else if(num==11){
			return "b";
		}else if(num==12){
			return "c";
		}else if(num==13){
			return "d";
		}else if(num==14){
			return "e";
		}else if(num==15){
			return "f";
		}else if(num==16){
			return "g";
		}else if(num==17){
			return "h";
		}else if(num==18){
			return "i";
		}else if(num==19){
			return "j";
		}else if(num==20){
			return "k";
		}else if(num==21){
			return "l";
		}else if(num==22){
			return "m";
		}else if(num==23){
			return "n";
		}else if(num==24){
			return "o";
		}else if(num==25){
			return "p";
		}else if(num==26){
			return "q";
		}else if(num==27){
			return "r";
		}else if(num==28){
			return "s";
		}else if(num==29){
			return "t";
		}else if(num==30){
			return "u";
		}else if(num==31){
			return "v";
		}else if(num==32){
			return "w";
		}else if(num==33){
			return "x";
		}else if(num==34){
			return "y";
		}else if(num==35){
			return "z";
		}else{
			return "";
		}
	}
	
	/**
	 * 
	 * @param i
	 * @param count
	 * @param str
	 * @param total
	 * @return
	 */
	public static int loop(int i, int count, String str, int total){
		count++;
		String s = "";
		for(int a=0; a<=35; a++){
			s = getNumOrLowerChar(a);
			String ss = str+s;
			System.out.println(ss);
			if(count<i){
				//閫掑綊
				total = loop(i, count, ss, total);
				total--;
			}
			total++;
		}
		return total;
	}

	/**
	 * 生成数字	
	 * @param i		几位数字
	 * @param str	固定的首几位字符
	 * @return
	 */
	public static int loopNumber(int i,String str){
		i--;
		for (int j = 0; j < 10; j++) {
			String s = j+"";
			String abs = str+s;
			if(i>=0){
				if(i==0){
					System.out.println(abs);
				}
				loopNumber(i,abs);
			}
		}
		return 1;
	}
	
	/**
	 * 
	 * @param i		几位字母
	 * @param a		一个过渡用的字符串
	 * @param b		已经生成的字符串
	 * @param c		需要生成的字符串
	 */
	public static void loopLetter(int i,String a,String b,String c){
		i--;
		for(int j=0; j<26; j++){
			a = getLowerChar(j);
			c = b+a;
			if(i>=0){
				if(i==0){
					System.out.println(c);
				}
				loopLetter(i,"",c,"");
			}
		}
	}
	
	public static void loopNumAndLetter(int i,String str){
		i--;
		String s = "";
		for(int a=0; a<=35; a++){
			s = getNumOrLowerChar(a);
			String ss = str+s;
			if(i>=0){
				if(i==0){
					System.out.println(ss);
				}
				loopNumAndLetter(i,ss);
			}
		}
	}
	
	public static void main(String[] args) {
		CombinedChar.loopLetter(3, "", "", "");
	}
	
}
